//
// Created by LiuYou on 2021/11/26.
//

#include <unistd.h>
#include <fcntl.h>
#include <cstdlib>
#include <sys/stat.h>

#include "Config.hpp"


int daemonize() {
    pid_t pid = fork();
    if (pid < 0) {
        return -1;
    }

    if (pid > 0) {
        exit( EXIT_SUCCESS );
    }

    int fd = open( "/dev/null", O_RDWR );
    if (fd < 0) {
        return -2;
    }
    // 使用 dup2() 函数来完成重定向。
    dup2( fd, 0 );
    dup2( fd, 1 );
//    dup2( fd, 2 );

    // 重定向结束后, 之前打开的空设备就可以关闭了。避免内存泄漏。
    close( fd );

    setsid();

    // 变成守护进程后需要做的结尾性的工作。

    // 通常会将当前进程的工作路径改为一个绝对存在的路径, 一般指定为 / 根目录。
//    chdir( "/" );
    chdir( "/tmp/http-server" );
    // 通常会将umask的值关掉。umask是否关掉需要具体的需求。
    umask( 0 );

    return 0;
}
